package com.fly.mapper;

import com.fly.bean.UserLog;
import com.fly.bean.Users;
import com.fly.util.Page;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

public interface UserManageMapper {

    /**
     * 查询用户的日志信息数量
     * @return
     */
    Integer selectNumberByAllUserLog();

    /**
     * 查询所有用户日志信息分页显示
     * @param page
     * @return
     */
    List<UserLog> selectAllUserLog(Page page);

    /**
     * 查询用户的日志信息数量通过查询信息
     * @return
     */
    Integer selectNumberByAllUserLogBySelectDate();

    /**
     * 查询所有用户日志信息分页显示通过查询信息
     * @param page
     * @return
     */
    List<UserLog> selectAllUserLogBySelectDate(@Param("page") Page page,@Param("startTime") String startTime,@Param("endTime") String endTime);

    /**
     * 查询用户表中的数量
     * @return
     */
    Integer selectUsersNumber();

    /**
     * 查询所有的用户名称用于循环查找用户最后登录时间
     * @return
     */
    String[] selectUserName(Page page);

    /**
     * 根据用户名查询对应的最后登录时间
     * @param userName
     * @return
     */
    String selectLastTimeByUserName(String userName);

    /**
     * 查询用户状态信息根据用户的userId
     * @return
     */
    String[] selectSysProValueNameByUserId(Page page);

    /**
     * 查询所有的用户信息分页显示
     * @param page
     * @return
     */
    List<Users> selectAllUsers(Page page);

    /**
     * 通过条件查询用户表中的数量
     * @param userName
     * @param sysProValueName
     * @return
     */
    Integer selectUsersNumberByUserNameAndSysProValueName(@Param("userName") String userName,@Param("sysProValueName") String sysProValueName);

    /**
     * 通过条件查询所有的用户名称用于循环查找用户最后登录时间
     * @param userName
     * @param page
     * @return
     */
    String[] selectUserNameByUserNameAndSysProValueName(@Param("userName") String userName,@Param("page") Page page);

    /**
     * 通过条件查询用户状态信息根据用户的userId
     * @param userName
     * @param sysProValueName
     * @return
     */
    String[] selectSysProValueNameByUserIdAndUserNameAndSysProValueName(@Param("userName") String userName,@Param("sysProValueName") String sysProValueName,@Param("page") Page page);

    /**
     * 通过条件查询所有的用户信息分页显示
     * @param page
     * @param userName
     * @param sysProValueName
     * @return
     */
    List<Users> selectAllUsersByUserNameAndSysProValueName(@Param("page") Page page,@Param("userName") String userName,@Param("sysProValueName") String sysProValueName);

    /**
     * 查询用户名是否存在
     * @param userName
     * @return
     */
    String selectUserNameExists(String userName);

    /**
     * 查询用户状态信息根据sysProValueName
     * @param sysProValueName
     * @return
     */
    Integer selectUserStateBySysProValueName(String sysProValueName);

    /**
     * 查询角色ID根据角色名称
     * @param roleName
     * @return
     */
    Integer selectRoleIdByRoleName(String roleName);

    /**
     * 添加用户日志信息
     * @param userLog
     * @return
     */
    Integer addUserLog(UserLog userLog);

    /**
     * 添加用户信息
     * @param users
     * @return
     */
    Integer addUserMessage(Users users);

    /**
     * 修改用户信息
     * @param user
     * @return
     */
    Integer modifyUserMessageByUserId(Users user);

    /**
     * 删除用户信息
     * @param userId
     * @return
     */
    Integer deleteUserMessage(Integer userId);

    /**
     * 通过用户ID查询该用户的所有信息
     * @param userId
     * @return
     */
    Users selectUserByUserId(Integer userId);

    /**
     * 修改用户状态
     * @param userState
     * @return
     */
    Integer modifyUserState(@Param("userState") Integer userState ,@Param("userId") Integer userId);

    /**
     * 根据用户Id查询角色Id
     * @param userId
     * @return
     */
    Integer selectRoleIdByUserId(Integer userId);

    /**
     * 根据角色Id查询角色名称
     * @param roleId
     * @return
     */
    String selectRoleNameByRoleId(Integer roleId);

    /**
     * 根据用户Id查询用户名
     * @param userId
     * @return
     */
    String selectUserNameByUserId(Integer userId);

    /**
     * 根据状态信息查询用户名
     * @param userState
     * @return
     */
    String[] selectUserNameByUserState(@Param("userState") Integer userState,@Param("page") Page page);
}
